Çàêðûòü îêíî         Ñïèñîê äðóãèõ äîêóìåíòîâ ÏÝÂÌ "Àãàò"

;                                     Ïpèëoæeíèe 1
;  IOSUB : 21.03.1986
;
; ÁAÇÈCHÛE ÏOÄÏPOÃPAMMÛ BBOÄA/BÛBOÄA
; OÁECÏE×ÈBAÞT EÄÈHÛE ÏPÈHÖÈÏÛ ÈCÏOËÜÇOBAHÈß
; KËABÈATÓPÛ È ÝKPAHA B CÈCTEME "ØKOËÜHÈÖA"
;
 ORG ¤1800 MAINFRAME
;
; (1) ÓÏPABËßÞÙÈE CÈMBOËÛ

NORMCOL EQU ¤81 CT-A/0
INVCOL EQU ¤82 CT-B/.
FLASHCOL EQU ¤83 CT-C/=
STOPSYM EQU ¤84 CT-D/F1
DCCOD EQU ¤85 CT-E/F2
ICCOD EQU ¤86 CT-F/F3
BELLCOD EQU ¤87 CT-G
LFCOD EQU ¤88 CT-H/<-
LFEED EQU ¤8A CT-J
HOMECOD EQU ¤8C CT-L
RETURN EQU ¤8D CT-M
REDCOL EQU ¤90 CT-P/1
GRNCOL EQU ¤91 CT-Q/2
YELCOL EQU ¤92 CT-R/3
BLUECOL EQU ¤93 CT-S/4
VIOLCOL EQU ¤94 CT-T/5
NAVYCOL EQU ¤9C CT-\/6
WHITCOL EQU ¤9D CT-]/7
RTCOD EQU ¤95 CT-U/->
INSCTRL EQU ¤96 CT-V
CANCOD EQU ¤98 CT-X
UPCOD EQU ¤99 CT-Y
DNCOD EQU ¤9A CT-Z
ESCCOD EQU ¤9B CT-[
EOLCOD EQU ¤9E CT-^/8
EOPCOD EQU ¤9F CT-_/9
;
CTRLCOL EQU ¤03 YELINV
RED EQU 1
GREEN EQU 2
YELLOW EQU 3
BLUE EQU 4
VIOLET EQU 5
NAVY EQU 6
WHITE EQU 7
BIT3 EQU ¤2C
;  (2) ÏOCTOßHHÛE ÏAPAMETPÛ ÄÈAËOÃA
WNDLFT EQU ¤20
WNDWDTH EQU ¤21
WNDTOP EQU ¤22
WNDBTM EQU ¤23
CH EQU ¤24
CV EQU ¤25
BASL EQU ¤28
BASH EQU ¤29
BAS2L EQU ¤2A
BAS2H EQU ¤2B
SAVE EQU BAS2H
CURSOR EQU ¤30
INVFLG EQU ¤32
PROMPT EQU ¤33
YSAV1 EQU ¤35
CSWL EQU ¤36
CSWH EQU ¤37
KSWL EQU ¤38
KSWH EQU ¤39
RNDL EQU ¤4E
RNDH EQU ¤4F
TXPAGE EQU ¤A6
;  (3) ÁÓÔEP BBOÄA
IN EQU ¤200
;  (4)_AÏÏAPATHÛE KOHCTAHTÛ
KBD EQU ¤C000
KBDSTRB EQU ¤C010
SPKR EQU ¤C030 
KBDREG EQU ¤C063
DISPLAY EQU ¤C700
;  (5) BXOÄHÛE TO×KÈ
 ENTRY IRQ PEAKÖÈß IRQ
 ENTRY NMI PEAKÖÈß NMI
 ENTRY RESET PEAKÖÈß RESET
 ENTRY RDKEY1 BBOÄ CÈMBOËA
 ENTRY RDKEY   C Ó-BA BBOÄA
 ENTRY KEYIN - C KËABÈATÓPÛ
 ENTRY STROBE - ÁEÇ KÓPCOPA
 ENTRY GETLNZ BBOÄ CTPOKÈ
 ENTRY GETLN
 ENTRY CROUT1 ÏC C O×ÈCTKOÉ XBOCTA CTPOKÈ
 ENTRY CROUT ÏC ÁEÇ O×ÈCTKÈ
 ENTRY COUT BÛBOÄ CÈMBOËA HA Ó-BO BÛBOÄA
 ENTRY COUT1 BÛBOÄ CÈMBOËA HA ÝKPAH
 ENTRY PRBYTE BÛBOÄ HEX-ÁAÉTA
 ENTRY PRHEX BÛBOÄ HEX-ÖÈÔPÛ
 ENTRY BS KÓPCOP HAÇAÄ
 ENTRY UP KÓPCOP BBEPX
 ENTRY VTAB HACTPOÉKA HA HA×AËO CTPOKÈ
 ENTRY VTABZ
 ENTRY HOME O×ÈCTKA ÝKPAHA TEK.ÖBETOM
 ENTRY CLREOP O×ÈCTKA XB. ÝKPAHA
 ENTRY CLEOP1
 ENTRY CR ÏEPEBOÄ CTPOKÈ
 ENTRY LF KÓPCOP BHÈÇ
 ENTRY CLREOL O×ÈCTKA XB. CTPOKÈ
 ENTRY CLEOLZ
 ENTRY CLEOLZ1
 ENTRY BELL ÇBOHOK
 ENTRY SETINV ÓCTAHOBKA
 ENTRY SETNORM  ÖBETHOCTÈ
 ENTRY SETFLASH  È
 ENTRY SETRED  ÖBETOB
 ENTRY SETBLUE
 ENTRY SETVIOL
 ENTRY SETWHIT
 ENTRY SETGRN
 ENTRY SETNAVY
 ENTRY SETCOL
 ENTRY SCROLL ÝKPAH BBEPX
 ENTRY SETTXT ÓCT.ÝKPAHA B TEKCT. PEÆÈM
 ENTRY INIT ÓCTAHOBKA CTAHÄ. OKHA
 ENTRY SETWND ÓCTAHOBKA OKHA
 ENTRY TABV
 ENTRY RDCHAR BBOÄ C PACÏOÇHABAHÈEM ÓÏP.
 ENTRY BASCALC HACTPOÉKA CTPOKÈ
 ENTRY WAIT ÏAÓÇA
 ENTRY TRANSL ÏEPEKOÄ. HA BBOÄE
;
;_____INTERRUPTS
;
*---IRQ-INTERRUPT-REQUEST
 EXTRN IRQREACT
IRQ JMP IRQREACT
*---NMI-NON-MASKABLE-INTERRUPTS
 EXTRN NMIREACT
NMI JMP NMIREACT
*---RESET
 EXTRN RESREACT
RESET JMP RESREACT
;
;_____I/O_SUBROUTINES
;
;___READ_KEY
RDKEY2 LDA #'^
 DFB BIT3
RDKEY1 LDA #'_
 STA CURSOR
RDKEY JMP (KSWL)
;___GET_KEY_FROM_KEYBOARD
KEYIN LDY CH
 LDA (BASL),Y
 STA YSAV1
 EOR CURSOR
 STA SAVE
KEYIN0 LDA (BASL),Y
 EOR SAVE
 STA (BASL),Y
KEYIN1 INC RNDL
 BNE KEYIN2
 INC RNDH
 LDA RNDH
 AND #¤3F
 BEQ KEYIN0
KEYIN2 LDA KBD
 BPL KEYIN1
 JSR TRANSL
 LDY CH
 PHA
 LDA YSAV1
 STA (BASL),Y
 PLA
 RTS
;---INPUT-WITHOUT-CURSOR
STROBE BIT KBDSTRB
STR LDA KBD
 BPL STR
 JMP TRANSL
;___GET_LINE
NOTCR CMP #' 
 BCC NOTCR3
 CPX #¤FF
 BEQ GLBELL
NOTCR3 JSR COUT
 CMP #LFCOD
 BEQ BCKSPC
 CMP #CANCOD
 BEQ CANCEL
 CMP #' 
 BCC NXTCHAR
NOTCR2 CPX #¤F8
 BCC NOTCR1
GLBELL JSR BELL
NOTCR1 INX
 BNE NXTCHAR
 DEX
 BNE NXTCHAR JMP
CANCEL LDA #'\
 JSR COUT
GETLNZ JSR CROUT
GETLN LDA PROMPT
 JSR COUT
 BIT KBDSTRB
 LDX #1
BCKSPC TXA
 BEQ GETLNZ
 DEX
NXTCHAR JSR RDCHAR
 CMP #RTCOD
 BNE ADDINP
 LDA YSAV1
ADDINP CMP #INSCTRL
 BNE ADDINP1
 JSR KEYIN !!!
 STA IN,X
 CMP #' 
 BCS NOTCR
 CMP #RETURN
 BEQ CROUT1
 CPX #¤FF
 BEQ GLBELL
 LDY INVFLG
 BMI NOTCR2
 PHA
 LDA #CTRLCOL
 STA INVFLG
 PLA
 ORA #¤40
 JSR COUT
 STY INVFLG
 BNE NOTCR2 JMP
ADDINP1 STA IN,X
 CMP #RETURN
 BEQ CROUT1
 JMP NOTCR
CROUT1 JSR CLREOL
CROUT LDA #RETURN 
;___OUTPUT_CHARACTER
COUT JMP (CSWL)
;___OUTPUT_CHAR_TO_SCREEN
COUT1 STY YSAV1 
 PHA
 JSR VIDWAIT
 LDY YSAV1
 PLA
 RTS
;___RECOGNIZE_VIDEO_CTRL_CODES
VIDWAIT ORA #¤80
 CMP #' 
 BCS STORADV
 LDY #VIDSUB-VIDCTRL-1
VIDOUT1 CMP VIDCTRL,Y 
 BEQ VIDOUT2
 DEY
 BPL VIDOUT1 
 RTS
VIDOUT2 LDA #<CR
 PHA
 LDA VIDSUB,Y
 PHA
 RTS  JMP
;___PRINT_HEX_BYTE
PRBYTE PHA
 LSR A
 LSR A
 LSR A
 LSR A
 JSR PRHEXZ
 PLA
PRHEX AND #¤0F
PRHEXZ ORA #¤B0 
 CMP #¤BA 
 BCC JCOUT
 ADC #¤06
JCOUT JMP COUT
;___STORE_CHARACTER_TO_SCREEN
STORADV LDY CH
 STA (BASL),Y
 INY 
 LDA INVFLG
 BMI ADV2
 STA (BASL),Y
ADV1 INY
ADV2 STY CH
 CPY WNDWDTH
 BCS CR
 RTS
;___MOVE_CURSOR_LEFT
BS LDA INVFLG
 BMI BS1
 DEC CH
BS1 DEC CH
 BPL RTS4
 LDY WNDWDTH
 LDA INVFLG 
 BMI BS2
 DEY
BS2 DEY
 STY CH
;___MOVE_CURSOR_UP
UP LDA WNDTOP 
 CMP CV
 BCS RTS4
 DEC CV
;___VERTICAL_TABULATE_CURSOR
VTAB LDA CV
VTABZ JSR BASCALC
 LDA BASL
 ADC WNDLFT
 STA BASL
RTS4 RTS
;___ADVANCE_CURSOR
ADVANCE LDY CH
 INY
 LDA INVFLG
 BMI ADV2
 BPL ADV1
;___CLEAR_SCREEN
HOME LDA WNDTOP
 STA CV
 LDY #¤00
 STY CH
;___CLEAR_END_OF_SCREEN
CLREOP LDY CH
 LDA CV
CLEOP1 PHA 
 JSR VTABZ
 JSR CLEOLZ
 LDY #¤00
 PLA
 ADC #¤00 C=1
 CMP WNDBTM
 BCC CLEOP1
 BCS VTAB
;___CARRIAGE_RETURN
CR LDY KBD
 BPL NOWAIT
 CPY #' 
 BNE NOWAIT
 BIT KBDSTRB
KBDWAIT LDY KBD
 BPL KBDWAIT
 CPY #STOPSYM
 BEQ NOWAIT
 BIT KBDSTRB
NOWAIT LDA #¤00
 STA CH
;___LINE_FEED
LF INC CV
 LDA CV
 CMP WNDBTM
 BCC VTABZ
 DEC CV
 JMP SCROLL
;___CLEAR_END_OF_LINE
CLREOL LDY CH
CLEOLZ LDA INVFLG
CLEOLZ1 PHA
 LDA #' 
 STA (BASL),Y 
 INY          
 PLA
 BIT INVFLG
 BMI CLEOLZ2
 STA (BASL),Y
 INY
CLEOLZ2 CPY WNDWDTH
 BCC CLEOLZ1
 RTS
;___TOGGLE_SPKR_AT_1_KHZ_0.1_SEC
BELL LDA #¤40
 JSR WAIT
 LDY #¤C0
BELL2 LDA #¤0C
 JSR WAIT
 LDA SPKR
 DEY
 BNE BELL2
 RTS
;----SET-COLORS
SETINV LDA INVFLG
 AND #¤87
 BNE STAFLAG
SETNORM LDA INVFLG
 ORA #¤28
 BNE STAFLAG
SETFLASH LDA INVFLG
 AND #¤87
 ORA #¤08
 BNE STAFLAG
SETRED LDA #RED
 DFB BIT3
SETBLUE LDA #BLUE
 DFB BIT3
SETVIOL LDA #VIOLET
 DFB BIT3
SETWHIT LDA #WHITE
 DFB BIT3
SETYEL LDA #YELLOW
 DFB BIT3
SETGRN LDA #GREEN
 DFB BIT3
SETNAVY LDA #NAVY
SETCOL STA SAVE
 LDA INVFLG
 AND #¤F8
 ORA SAVE
STAFLAG STA INVFLG
 RTS
;___DELETE_CHARACTER
DELCHAR LDY CH
 LDA INVFLG
 BMI DELCH64
 BPL DELCH32 -JMP
;___INSERT_CHARACTER
INSCHAR LDY WNDWDTH
 LDA INVFLG
 BMI INSCH64
 BPL INSCH32 -JMP
;___ROLL_SCREEN_UP
SCROLL LDA WNDTOP
 PHA
 JSR VTABZ
SCRL1 LDA BASL
 STA BAS2L
 LDA BASH
 STA BAS2H
 LDY WNDWDTH
 DEY
 PLA
 ADC #¤01
 CMP WNDBTM
 BCS SCRL3
 PHA
 JSR VTABZ
SCRL2 LDA (BASL),Y
 STA (BAS2L),Y
 DEY
 BPL SCRL2
 BMI SCRL1
SCRL3 LDY #¤00 
 LDA INVFLG
 JSR CLEOLZ1
 JMP VTAB 
*
DELCH32 INY
 INY
 LDA (BASL),Y
 DEY
 DEY
 STA (BASL),Y
 INY
 CPY WNDWDTH
 BCC DELCH32
 DEY
 LDA INVFLG
 STA (BASL),Y
 BNE DC2 -JMP
*
INSCH32 DEY
 DEY
 DEY
 LDA (BASL),Y
 INY
 INY
 STA (BASL),Y
 CPY CH
 BNE INSCH32
 LDA #' 
 STA (BASL),Y
 INY
 LDA INVFLG
 STA (BASL),Y
 RTS
*
INSCH64 DEY
 DEY
 LDA (BASL),Y
 INY
 STA (BASL),Y
 CPY CH
 BNE INSCH64
 LDA #' 
 STA (BASL),Y
 RTS
*
DELCH64 INY
 LDA (BASL),Y
 DEY
 STA (BASL),Y
 INY
 CPY WNDWDTH
 BCC DELCH64
DC2 DEY
 LDA #' 
 STA (BASL),Y
 RTS
;___VIDEO_CONTROL_CODES
VIDCTRL DFB ICCOD
 DFB DCCOD
 DFB NORMCOL
 DFB INVCOL
 DFB FLASHCOL
 DFB REDCOL
 DFB GRNCOL
 DFB YELCOL
 DFB VIOLCOL
 DFB NAVYCOL
 DFB BLUECOL
 DFB WHITCOL
 DFB RETURN
 DFB LFEED
 DFB LFCOD
 DFB RTCOD
 DFB UPCOD
 DFB DNCOD
 DFB HOMECOD
 DFB EOLCOD
 DFB EOPCOD
 DFB BELLCOD
;___VIDEO_CONTROL_SUBROUTINES
VIDSUB DFB >INSCHAR-1
 DFB >DELCHAR-1
 DFB >SETNORM-1
 DFB >SETINV-1
 DFB >SETFLASH-1
 DFB >SETRED-1
 DFB >SETGRN-1
 DFB >SETYEL-1
 DFB >SETVIOL-1
 DFB >SETNAVY-1
 DFB >SETBLUE-1
 DFB >SETWHIT-1
 DFB >CR-1
 DFB >CR-1
 DFB >BS-1
 DFB >ADVANCE-1
 DFB >UP-1
 DFB >LF-1
 DFB >HOME-1
 DFB >CLREOL-1
 DFB >CLREOP-1
 DFB >BELL-1
;___SET_SCREEN_MODE
SETTXT LDA INVFLG 
 ASL A
 LDA TXPAGE
 ROR A
 ORA #¤02
 TAY
 STA DISPLAY,Y
 RTS
;___SET_STANDARD_WINDOW
INIT LDA #¤00
SETWND STA WNDTOP
 LDA #¤00 
 STA WNDLFT 
 LDA #¤40 
 STA WNDWDTH 
 LSR A
 STA WNDBTM 
 LDA #¤1F 
TABV STA CV
 JMP VTAB
;___READ_CHAR,_RECOGNIZE_ESC
ESCNEW JSR ESCOLD
ESC JSR RDKEY2
 CMP #RTCOD 
 BEQ ESCNEW
 CMP #LFCOD 
 BEQ ESCNEW
 CMP #UPCOD
 BEQ ESCNEW
 CMP #DNCOD
 BEQ ESCNEW
ESCNOW JSR ESCOLD
RDCHAR: JSR RDKEY1
 CMP #ESCCOD 
 BEQ ESC
 CMP #UPCOD 
 BEQ ESCNOW
 CMP #DNCOD 
 BEQ ESCNOW 
RDCHRTS RTS
ESCOLD CMP #' 
 BCS RDCHRTS
 JMP COUT
;___CALCULATE_BASE_ADDRESS
BASCALC STA BASH 
 LDA #¤00
 LSR BASH
 ROR A
 LSR BASH
 ROR A
 STA BASL
 LDA TXPAGE
 ADC BASH
 STA BASH
 RTS
;__WAIT_(13+27/2*A+512*A*A-USEC)
WAIT SEC
WAIT2 PHA
WAIT3 SBC #¤01
 BNE WAIT3
 PLA
 SBC #¤01
 BNE WAIT2
 RTS
;---TRANSLATE-SYMBOL
TRANSL PHA
 LDA #¤50
 JSR WAIT
 PLA
 BIT KBDSTRB
 CMP #¤C0
 BCC TR2
 BIT KBDREG
 BMI TR4
 EOR #¤20
TR4 LDY #TABLE2-TABLE1-1
TR1 CMP TABLE1,Y
 BEQ TR3
 DEY
 BPL TR1
TR2 RTS
TR3 LDA TABLE2,Y
 RTS
TABLE1 ASC "ÀÂÑÅÍÊÌÎÐÒÕ"
TABLE2 ASC "ABCEHKMOPTX"

Çàêðûòü îêíî         Ñïèñîê äðóãèõ äîêóìåíòîâ ÏÝÂÌ "Àãàò"